Connection Pool
コネクションプール_
DBへのセッションを使い回す仕組みのこと
モチベーション
connectionの確立は高コストである
リクエストごとにconnectionを作るのは効率が悪いので、予め一定数のconnectionを作っておき、必要なときにそれを使い回す
基本的な動き
1. アプリ起動時や初回アクセス時に n 個の connection を作成
2. アプリが DB クエリを実行したい時にプールからコネクションを借りる
3. 使い終わったらコネクションを返す
Connection Poolは常にconnectionの管理を行う
生存監視
再接続
Idle 時のクローズ
etc.
#wip
gpt-5.icon
よく出る設定項目
max pool size(最大接続数)
プールが保持できる最大コネクション数。
多すぎる → DB が死ぬ
少なすぎる → アプリの待ち時間が増える
→ アプリの並列度 & DB の性能に応じて調整
min pool size(最小接続数)
キープしておく接続数。
ワークロードの急増時に「接続作成のスパイク」が起きないようにする。
idle timeout / max lifetime
idle timeout:使っていない接続を閉じるまでの時間
max lifetime:どれだけ生き続けても OK か(DB 側の制限に合わせる)
特に RDS / Aurora は長生きしすぎたコネクションが突然切られることがあるため、max lifetime は重要。
connection timeout
プールからコネクションを借りる際、
「これ以上待ったらエラーにする」
という設定。
client側で制御する
カーネルにせよ、データベース層にせよ、結局はメモリなどのハードウェアリソースをいたずらに消費しないための制限である。 メモリが溢れてディスクへのスワップが発生し、データベースサーバが停止すると、システム全体に影響する。 システム全体に影響を与えるくらいなら、クライアント側で上限を設けておいて、多少の接続待ちが起きてもよいことにする。
ここでの「client」はWeb Appサーバーのこと
Webシステムにおけるデータベース接続アーキテクチャ概論 - ゆううきブログ
わかりやすい
https://please-sleep.cou929.nu/go-sql-db-connection-pool.html
https://qiita.com/snaka/items/b6e7500c96e04c131d9e
https://yakst.com/ja/posts/5444
https://wyukawa.hatenablog.com/entry/20131116/1384621867
https://naoya-2.hatenadiary.org/entry/20060912/1158058322